using Arrowgene.Ddon.GameServer.Dump;
using Arrowgene.Ddon.Server;
using Arrowgene.Ddon.Shared.Entity.PacketStructure;
using Arrowgene.Logging;
using Arrowgene.Ddon.Shared.Model;
using System.Linq;

namespace Arrowgene.Ddon.GameServer.Handler
{
    public class MailSystemMailGetListDataHandler : GameRequestPacketHandler<C2SMailSystemMailGetListDataReq, S2CMailSystemMailGetListDataRes>
    {
        private static readonly ServerLogger Logger = LogProvider.Logger<ServerLogger>(typeof(MailSystemMailGetListDataHandler));

        public MailSystemMailGetListDataHandler(DdonGameServer server) : base(server)
        {
        }

        public override S2CMailSystemMailGetListDataRes Handle(GameClient client, C2SMailSystemMailGetListDataReq request)
        {
            // var pcap = new S2CMailSystemMailGetListDataRes.Serializer().Read(InGameDump.Dump_85.AsBuffer());
            var pcap = new S2CMailSystemMailGetListDataRes.Serializer().Read(pcap_data);

            S2CMailSystemMailGetListDataRes result = new S2CMailSystemMailGetListDataRes();



            var messages = Server.Database.SelectSystemMailMessages(client.Character.CharacterId);
            foreach (var message in messages)
            {
                byte itemState = (byte) MailItemState.Exist;
                var attachments = Server.Database.SelectAttachmentsForSystemMail(message.MessageId);
                if (attachments.Count > 0)
                {
                    // TODO: Should item state be based on attachment type?
                    itemState = (byte)(attachments.All(x => x.IsReceived) ? MailItemState.Exist : MailItemState.Exist | MailItemState.Item);
                }

                result.MailInfo.Add(message.ToCDataMailInfo(itemState));
            }

            return result;
        }

        public byte[] pcap_data = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xA8, 0x12, 0x8F, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x4F, 0x4E, 0xE9, 0x81, 0x8B, 0xE5, 0x96, 0xB6, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x00, 0x3A, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x92, 0xE3, 0x83, 0x97, 0xE3, 0x83, 0xAC, 0xE3, 0x82, 0xA4, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xE6, 0xCD, 0xF2, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xA8, 0x12, 0x8E, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x4F, 0x4E, 0xE9, 0x81, 0x8B, 0xE5, 0x96, 0xB6, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x00, 0x3A, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x92, 0xE3, 0x83, 0x97, 0xE3, 0x83, 0xAC, 0xE3, 0x82, 0xA4, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xE6, 0xCD, 0xEC, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xA8, 0x12, 0x8D, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x4F, 0x4E, 0xE9, 0x81, 0x8B, 0xE5, 0x96, 0xB6, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x00, 0x3A, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x92, 0xE3, 0x83, 0x97, 0xE3, 0x83, 0xAC, 0xE3, 0x82, 0xA4, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xE6, 0xCD, 0xE6, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xA8, 0x12, 0x8C, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x4F, 0x4E, 0xE9, 0x81, 0x8B, 0xE5, 0x96, 0xB6, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x00, 0x3A, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x92, 0xE3, 0x83, 0x97, 0xE3, 0x83, 0xAC, 0xE3, 0x82, 0xA4, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xE6, 0xCD, 0xE1, 0x00, 0x00, 0x00, 0x00, 0x1A, 0xA8, 0x12, 0x8B, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x44, 0x44, 0x4F, 0x4E, 0xE9, 0x81, 0x8B, 0xE5, 0x96, 0xB6, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x00, 0x3A, 0xE3, 0x83, 0x89, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xB4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xBA, 0xE3, 0x83, 0x89, 0xE3, 0x82, 0xB0, 0xE3, 0x83, 0x9E, 0x20, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0xA9, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0x92, 0xE3, 0x83, 0x97, 0xE3, 0x83, 0xAC, 0xE3, 0x82, 0xA4, 0xE3, 0x81, 0x8F, 0xE3, 0x81, 0xA0, 0x00, 0x00, 0x00, 0x00, 0x5D, 0xE6, 0xCD, 0xE1, 0x00, 0x04, 0x00, 0x0A, 0x00, 0x08, 0x00, 0x05, 0x00, 0x04 };
    }
}
